﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess;
using System.Data.OracleClient;
using EntitiesLayer.Entities;
using System.Data;

namespace DataLayer.DAO
{
   public class NoConformidadDAO
    {
       private Connection.Connection cn;
       private OracleConnection objCn;

       public NoConformidadDAO()
        {
            cn = new Connection.Connection();
            objCn = cn.Conecta();
        }

       public List<NoConformidad> bucarNoConformidad(string CodNoConformidad, string DescripNoConfor, string CodArea, string CodOrigen)
       {
           List<NoConformidad> list = new List<NoConformidad>();

           using (OracleCommand cmd = new OracleCommand("BUSCARNOCONFORMIDADCODIGO", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter refParameter = new OracleParameter();
               refParameter.ParameterName = "RECORDSET";
               refParameter.OracleType = OracleType.Cursor;
               refParameter.Direction = ParameterDirection.Output;

               OracleParameter codQRParameter = new OracleParameter();
               codQRParameter.ParameterName = "R_CODIGO";
               codQRParameter.OracleType = OracleType.VarChar;
               codQRParameter.Size = 30;
               codQRParameter.Direction = ParameterDirection.Input;
               codQRParameter.Value = CodNoConformidad.Trim().ToLower();

               OracleParameter DesQRParameter = new OracleParameter();
               DesQRParameter.ParameterName = "R_Descripcion";
               DesQRParameter.OracleType = OracleType.VarChar;
               DesQRParameter.Size = 4000;
               DesQRParameter.Direction = ParameterDirection.Input;
               DesQRParameter.Value = DescripNoConfor.Trim().ToLower();

               OracleParameter CodOriParameter = new OracleParameter();
               CodOriParameter.ParameterName = "R_COD_ORIGEN";
               CodOriParameter.OracleType = OracleType.VarChar;
               CodOriParameter.Size = 10;
               CodOriParameter.Direction = ParameterDirection.Input;
               CodOriParameter.Value = CodOrigen;

               OracleParameter CodAreaParameter = new OracleParameter();
               CodAreaParameter.ParameterName = "R_Area_Inv";
               CodAreaParameter.OracleType = OracleType.VarChar;
               CodAreaParameter.Size = 10;
               CodAreaParameter.Direction = ParameterDirection.Input;
               CodAreaParameter.Value = CodArea;



               cmd.Parameters.Add(refParameter);
               cmd.Parameters.Add(codQRParameter);
               cmd.Parameters.Add(DesQRParameter);
               cmd.Parameters.Add(CodOriParameter);
               cmd.Parameters.Add(CodAreaParameter);
              
               try
               {
                   objCn.Open();

                   OracleDataReader dr = cmd.ExecuteReader();

                   while (dr.Read())
                   {
                       NoConformidad p = new NoConformidad();
                       p.CodNoConformidad = Convert.ToString(dr[0]);
                       p.DescripNoConformidad = Convert.ToString(dr[1]);
                       p.FechaNoconformidad = Convert.ToDateTime(dr[2]);
                       p.NomEstadoNoConformidad = Convert.ToString(dr[3]);
                       list.Add(p);
                   }
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return list;
       }

       public NoConformidad mostrarNoConformidad(string CodNoConfor)
       {
           NoConformidad p = new NoConformidad();

           using (OracleCommand cmd = new OracleCommand("RECUPERARNOCORFORMIDAD", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter refParameter = new OracleParameter();
               refParameter.ParameterName = "RECORDSET";
               refParameter.OracleType = OracleType.Cursor;
               refParameter.Direction = ParameterDirection.Output;

               OracleParameter codQRParameter = new OracleParameter();
               codQRParameter.ParameterName = "R_Cod_NoConfor";
               codQRParameter.OracleType = OracleType.VarChar;
               codQRParameter.Size = 30;
               codQRParameter.Direction = ParameterDirection.Input;
               codQRParameter.Value = CodNoConfor;

               cmd.Parameters.Add(refParameter);
               cmd.Parameters.Add(codQRParameter);

               try
               {
                   objCn.Open();

                   OracleDataReader dr = cmd.ExecuteReader();

                   while (dr.Read())
                   {
                       p.DescripNoConformidad = Convert.ToString(dr[0]);
                       p.DirigidoA = Convert.ToString(dr[1]);
                       p.CodAnalisisCausa = Convert.ToString(dr[2]);
                       p.FechaRegistroAccion = Convert.ToDateTime(dr[3]);
                       p.DescripAccion = Convert.ToString(dr[4]);
                       p.RegPorSegNoConformidad = Convert.ToString(dr[5]);
                   }
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return p;
       }

       public NoConformidad mostrarNoAnalisisCausa(string CodNoConfor)
       {
           NoConformidad p = new NoConformidad();

           using (OracleCommand cmd = new OracleCommand("RECUPERARANALISISCAUSA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter refParameter = new OracleParameter();
               refParameter.ParameterName = "RECORDSET";
               refParameter.OracleType = OracleType.Cursor;
               refParameter.Direction = ParameterDirection.Output;

               OracleParameter codQRParameter = new OracleParameter();
               codQRParameter.ParameterName = "R_Cod_Noconfor";
               codQRParameter.OracleType = OracleType.VarChar;
               codQRParameter.Size = 30;
               codQRParameter.Direction = ParameterDirection.Input;
               codQRParameter.Value = CodNoConfor;

               cmd.Parameters.Add(refParameter);
               cmd.Parameters.Add(codQRParameter);

               try
               {
                   objCn.Open();

                   OracleDataReader dr = cmd.ExecuteReader();

                   while (dr.Read())
                   {
                       p.CodAnalisisCausa = Convert.ToString(dr[0]);
                       p.FechaRegistroAccion = Convert.ToDateTime(dr[1]);
                       p.DescripAccion = Convert.ToString(dr[2]);
                       p.RegPorSegNoConformidad = Convert.ToString(dr[3]);
                   }
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return p;
       }


       public List<NoConformidad> mostrarVeriEficacia(string CodNoConfor)
            {
            List<NoConformidad> lstObject = new List<NoConformidad>();
                try
                {
                    OracleCommand cmd = new OracleCommand("RECUPERARVERICACIONEFICACIA", objCn);
                    objCn.Open();
                    cmd.Connection = objCn;
                    cmd.CommandTimeout = 60;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add(new OracleParameter("RECORDSET", OracleType.Cursor, 100,ParameterDirection.Output,null,DataRowVersion.Current,false,null));
                    cmd.Parameters.Add(new OracleParameter("R_Cod_NoConfor", OracleType.VarChar, 30, ParameterDirection.Input, false, 10, 0, null, DataRowVersion.Current, CodNoConfor));
                    
                    using (IDataReader oRead = cmd.ExecuteReader(CommandBehavior.SingleResult))
                    {
                        if ( oRead != null ){
                            while (oRead.Read())
                            {
                                NoConformidad pt = new NoConformidad();

                                if (!oRead.IsDBNull(oRead.GetOrdinal("DVDE_FECHAREG_EFICACIA")))
                                {
                                    if (!string.IsNullOrEmpty(oRead.GetDateTime(oRead.GetOrdinal("DVDE_FECHAREG_EFICACIA")).ToString()))
                                    {
                                        pt.FechaRegVeEficacia = oRead.GetDateTime(oRead.GetOrdinal("DVDE_FECHAREG_EFICACIA"));        
                                    }
                                }

                                if (!oRead.IsDBNull(oRead.GetOrdinal("VVDE_DESCRIP_EFICACIA")))
                                {
                                    if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VVDE_DESCRIP_EFICACIA")).ToString()))
                                    {
                                        pt.DescripVeEficacia = oRead.GetString(oRead.GetOrdinal("VVDE_DESCRIP_EFICACIA"));        
                                    }
                                }

                                if (!oRead.IsDBNull(oRead.GetOrdinal("VVDE_REGISTROPOR_EFICACIA")))
                                {
                                    if (!String.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VVDE_REGISTROPOR_EFICACIA"))))
                                    {
                                        pt.RegPorVeEfiacia = oRead.GetString(oRead.GetOrdinal("VVDE_REGISTROPOR_EFICACIA"));
                                    }
                                }

                                if (!oRead.IsDBNull(oRead.GetOrdinal("VVDE_RESULTADO_EFICACIA")))
                                {
                                    if (!String.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VVDE_RESULTADO_EFICACIA"))))
                                    {
                                        pt.ResulVeEfiacia = oRead.GetString(oRead.GetOrdinal("VVDE_RESULTADO_EFICACIA"));
                                    }
                                }

                                if (!oRead.IsDBNull(oRead.GetOrdinal("vest_codestado")))
                                {
                                    if (!String.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("vest_codestado"))))
                                    {
                                        pt.CodEstadoNoConformidad = oRead.GetString(oRead.GetOrdinal("vest_codestado"));
                                    }
                                }
                                
                                lstObject.Add(pt);
                                pt = null;
                               }
                        } 
                    }
                                                                               
                }catch (Exception ex){
                    objCn.Dispose();
                }finally{
                    objCn.Close();
                }

                return lstObject;
           
        }


       public int insertSegNoConformidad(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("Insertseguimientonoconformidad", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_VNC_CODIGO", OracleType.VarChar, 30);
               p1.Value = p.CodNoConformidad;

               OracleParameter p2 = new OracleParameter("R_Dana_Fecha_Regis", OracleType.DateTime);
               p2.Value = p.FechaSegNoConformidad;

               OracleParameter p3 = new OracleParameter("R_DANA_DESCRIPCION", OracleType.VarChar, 4000);
               p3.Value = p.DescripSegNoConformidad;

               OracleParameter p4 = new OracleParameter("R_DANA_REGISTRADOPOR", OracleType.VarChar, 200);
               p4.Value = p.RegPorSegNoConformidad;


               cmd.Parameters.Add(p1);
               cmd.Parameters.Add(p2);
               cmd.Parameters.Add(p3);
               cmd.Parameters.Add(p4);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }

       public int insertAccionCorrectiva(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("INSERTAACCIONCORRECTIVA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_COD_ANACAUSA", OracleType.VarChar, 20);
               p1.Value = p.CodAnalisisCausa;

               OracleParameter p2 = new OracleParameter("R_DESCRIP_ACCION", OracleType.VarChar, 4000);
               p2.Value = p.DescripAccion;

               OracleParameter p3 = new OracleParameter("R_RESPONSABLE", OracleType.VarChar, 1000);
               p3.Value = p.ResponsableAccion;

               OracleParameter p4 = new OracleParameter("R_DESCRIP_OBSERVACION", OracleType.VarChar, 4000);
               p4.Value = p.DescripObservacion;

               OracleParameter p5 = new OracleParameter("R_Fecha_Registro", OracleType.DateTime);
               p5.Value = p.FechaRegistroAccion;

               OracleParameter p6 = new OracleParameter("R_Nom_Archivo", OracleType.VarChar, 200);
               p6.Value = p.NomArchivo;

               OracleParameter p7 = new OracleParameter("R_Ruta_Archivo", OracleType.VarChar, 300);
               p7.Value = p.RutaArchivo;

               OracleParameter p8 = new OracleParameter("R_VEST_CODESTADO", OracleType.VarChar, 20);
               p8.Value = p.CodEstadoAnaCausa;

               OracleParameter p9 = new OracleParameter("R_USUARIOQUEREGISTRO", OracleType.VarChar, 1000);
               p9.Value = p.UsuarioRegistroAccionCorr;


               cmd.Parameters.Add(p1);
               cmd.Parameters.Add(p2);
               cmd.Parameters.Add(p3);
               cmd.Parameters.Add(p4);
               cmd.Parameters.Add(p5);
               cmd.Parameters.Add(p6);
               cmd.Parameters.Add(p7);
               cmd.Parameters.Add(p8);
               cmd.Parameters.Add(p9);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }


       public int insertAccionPreventiva(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("INSERTAACCIONPREVENTIVA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_COD_ANACAUSA", OracleType.VarChar, 20);
               p1.Value = p.CodAnalisisCausa;

               OracleParameter p2 = new OracleParameter("R_DESCRIP_ACCION", OracleType.VarChar, 4000);
               p2.Value = p.DescripAccionPrev;

               OracleParameter p3 = new OracleParameter("R_RESPONSABLE", OracleType.VarChar, 1000);
               p3.Value = p.ResponsableAccionPrev;

               OracleParameter p4 = new OracleParameter("R_DESCRIP_OBSERVACION", OracleType.VarChar, 4000);
               p4.Value = p.DescripObservacionPrev;

               OracleParameter p5 = new OracleParameter("R_Fecha_Registro", OracleType.DateTime);
               p5.Value = p.FechaRegistroAccionPrev;

               OracleParameter p6 = new OracleParameter("R_Nom_Archivo", OracleType.VarChar, 200);
               p6.Value = p.NomArchivo;

               OracleParameter p7 = new OracleParameter("R_Ruta_Archivo", OracleType.VarChar, 300);
               p7.Value = p.RutaArchivo;

               OracleParameter p8 = new OracleParameter("R_VEST_CODESTADO", OracleType.VarChar, 20);
               p8.Value = p.CodEstadoAnaCausa;

               OracleParameter p9 = new OracleParameter("R_USUARIOQUEREGISTRO", OracleType.VarChar, 1000);
               p9.Value = p.UsuarioRegistroAccionPrev;


               cmd.Parameters.Add(p1);
               cmd.Parameters.Add(p2);
               cmd.Parameters.Add(p3);
               cmd.Parameters.Add(p4);
               cmd.Parameters.Add(p5);
               cmd.Parameters.Add(p6);
               cmd.Parameters.Add(p7);
               cmd.Parameters.Add(p8);
               cmd.Parameters.Add(p9);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }


       public List<NoConformidad> mostrarAccionCorrectiva(string CodReclamoResp)
       {
           List<NoConformidad> list = new List<NoConformidad>();

           using (OracleCommand cmd = new OracleCommand("RECUPERARACCIONCORRECTIVA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter refParameter = new OracleParameter();
               refParameter.ParameterName = "RECORDSET";
               refParameter.OracleType = OracleType.Cursor;
               refParameter.Direction = ParameterDirection.Output;

               OracleParameter codQRParameter = new OracleParameter();
               codQRParameter.ParameterName = "R_CODIGOANACAUSA";
               codQRParameter.OracleType = OracleType.VarChar;
               codQRParameter.Size = 30;
               codQRParameter.Direction = ParameterDirection.Input;
               codQRParameter.Value = CodReclamoResp;

               cmd.Parameters.Add(refParameter);
               cmd.Parameters.Add(codQRParameter);

               try
               {
                   objCn.Open();

                   OracleDataReader dr = cmd.ExecuteReader();

                   while (dr.Read())
                   {
                       NoConformidad p = new NoConformidad();

                       p.NomEstadoAnaCausa = Convert.ToString(dr[0]);
                       p.ResponsableAccion = Convert.ToString(dr[1]);
                       p.FechaRegistroAccion = Convert.ToDateTime(dr[2]);
                       p.DescripAccion = Convert.ToString(dr[3]);
                       p.CodAccionesCorrectivas = Convert.ToString(dr[4]);
                       p.DescripObservacionAcCorrectiva = Convert.ToString(dr[5]);
                       p.CodEstadoAnaCausa = Convert.ToString(dr[6]);

                       list.Add(p);
                   }
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return list;
       }

       public List<NoConformidad> mostrarAccionPreventiva(string CodReclamoResp)
       {
           List<NoConformidad> list = new List<NoConformidad>();

           using (OracleCommand cmd = new OracleCommand("RECUPERARACCIONPREVENTIVA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter refParameter = new OracleParameter();
               refParameter.ParameterName = "RECORDSET";
               refParameter.OracleType = OracleType.Cursor;
               refParameter.Direction = ParameterDirection.Output;

               OracleParameter codQRParameter = new OracleParameter();
               codQRParameter.ParameterName = "R_CODIGOANACAUSA";
               codQRParameter.OracleType = OracleType.VarChar;
               codQRParameter.Size = 30;
               codQRParameter.Direction = ParameterDirection.Input;
               codQRParameter.Value = CodReclamoResp;

               cmd.Parameters.Add(refParameter);
               cmd.Parameters.Add(codQRParameter);

               try
               {
                   objCn.Open();

                   OracleDataReader dr = cmd.ExecuteReader();

                   while (dr.Read())
                   {
                       NoConformidad p = new NoConformidad();

                       p.NomEstadoAnaCausa = Convert.ToString(dr[0]);
                       p.ResponsableAccionPrev = Convert.ToString(dr[1]);
                       p.FechaActualizacionAccPrev = Convert.ToDateTime(dr[2]);
                       p.DescripAccionPrev = Convert.ToString(dr[3]);
                       p.CodAccionesPreventiva = Convert.ToString(dr[4]);
                       p.DescripObservacionPrev = Convert.ToString(dr[5]);
                       p.CodEstadoAnaCausa = Convert.ToString(dr[6]);

                       list.Add(p);
                   }
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return list;
       }

       public int deleteAccionCorrectiva(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("DELETEACCIONCORRECTIVA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_COD_ACCORRECTIVO", OracleType.Number);
               p1.Value = p.CodAccionesCorrectivas;

               cmd.Parameters.Add(p1);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }


       public int deleteAccionPreventiva(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("DELETEACCIONPREVENTIVA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_COD_ACPREVENTIVA", OracleType.Number);
               p1.Value = p.CodAccionesPreventiva;

               cmd.Parameters.Add(p1);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }


       public int updateAccionCorrectiva(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("UpdateAccionCorrectiva", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_COD_ACCORRECTIVA", OracleType.VarChar, 20);
               p1.Value = p.CodAccionesCorrectivas;

               OracleParameter p2 = new OracleParameter("R_DESCRIP_ACCION", OracleType.VarChar, 4000);
               p2.Value = p.DescripAccion;

               OracleParameter p3 = new OracleParameter("R_RESPONSABLE", OracleType.VarChar, 1000);
               p3.Value = p.ResponsableAccion;

               OracleParameter p4 = new OracleParameter("R_CODESTADO", OracleType.VarChar, 20);
               p4.Value = p.CodEstadoAnaCausa;

               OracleParameter p5 = new OracleParameter("R_DESCRIP_OBSERVACION", OracleType.VarChar, 4000);
               p5.Value = p.DescripObservacionAcCorrectiva;

               OracleParameter p6 = new OracleParameter("R_FECHAACTUALIZACION", OracleType.DateTime);
               p6.Value = p.FechaActualizacionAccCorre;

               OracleParameter p7 = new OracleParameter("R_USUACTUALIZO", OracleType.VarChar, 1000);
               p7.Value = p.UsuActualizoAccCorre;

               OracleParameter p8 = new OracleParameter("R_COD_ANACAUSA", OracleType.VarChar, 20);
               p8.Value = p.CodAnalisisCausa;

               cmd.Parameters.Add(p1);
               cmd.Parameters.Add(p2);
               cmd.Parameters.Add(p3);
               cmd.Parameters.Add(p4);
               cmd.Parameters.Add(p5);
               cmd.Parameters.Add(p6);
               cmd.Parameters.Add(p7);
               cmd.Parameters.Add(p8);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }


       public int updateAccionPreventiva(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("UpdateAccionPreventiva", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_COD_ACPREVENTIVA", OracleType.VarChar, 20);
               p1.Value = p.CodAccionesPreventiva;

               OracleParameter p2 = new OracleParameter("R_DESCRIP_ACCION", OracleType.VarChar, 4000);
               p2.Value = p.DescripAccionPrev;

               OracleParameter p3 = new OracleParameter("R_RESPONSABLE", OracleType.VarChar, 1000);
               p3.Value = p.ResponsableAccionPrev;

               OracleParameter p4 = new OracleParameter("R_CODESTADO", OracleType.VarChar, 20);
               p4.Value = p.CodEstadoAnaCausa;

               OracleParameter p5 = new OracleParameter("R_DESCRIP_OBSERVACION", OracleType.VarChar, 4000);
               p5.Value = p.DescripObservacionPrev;

               OracleParameter p6 = new OracleParameter("R_FECHAACTUALIZACION", OracleType.DateTime);
               p6.Value = p.FechaActualizacionAccPrev;

               OracleParameter p7 = new OracleParameter("R_USUACTUALIZO", OracleType.VarChar, 1000);
               p7.Value = p.UsuActualizoAccPrev;

               OracleParameter p8 = new OracleParameter("R_COD_ANACAUSA", OracleType.VarChar, 20);
               p8.Value = p.CodAnalisisCausa;

               cmd.Parameters.Add(p1);
               cmd.Parameters.Add(p2);
               cmd.Parameters.Add(p3);
               cmd.Parameters.Add(p4);
               cmd.Parameters.Add(p5);
               cmd.Parameters.Add(p6);
               cmd.Parameters.Add(p7);
               cmd.Parameters.Add(p8);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }

       public int registraVerificaciónEficacia(NoConformidad p)
       {
           int resultado = 0;

           using (OracleCommand cmd = new OracleCommand("INSERTVERIFICACIONEFICACIA", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;

               OracleParameter p1 = new OracleParameter("R_VNC_CODIGO", OracleType.VarChar, 30);
               p1.Value = p.CodNoConformidad;

               OracleParameter p2 = new OracleParameter("R_FECHAREG_EFICACIA", OracleType.DateTime);
               p2.Value = p.FechaRegVeEficacia;

               OracleParameter p3 = new OracleParameter("R_DESCRIP_EFICACIA", OracleType.VarChar, 4000);
               p3.Value = p.DescripVeEficacia;

               OracleParameter p4 = new OracleParameter("R_REGISTROPOR_EFICACIA", OracleType.VarChar, 1000);
               p4.Value = p.RegPorVeEfiacia;

               OracleParameter p5 = new OracleParameter("R_RESULTADO_EFICACIA", OracleType.VarChar, 10);
               p5.Value = p.ResulVeEfiacia;

               OracleParameter p6 = new OracleParameter("R_Nom_Archivo", OracleType.VarChar, 200);
               p6.Value = p.NomArchivo;

               OracleParameter p7 = new OracleParameter("R_Ruta_Archivo", OracleType.VarChar, 300);
               p7.Value = p.RutaArchivo;

               cmd.Parameters.Add(p1);
               cmd.Parameters.Add(p2);
               cmd.Parameters.Add(p3);
               cmd.Parameters.Add(p4);
               cmd.Parameters.Add(p5);
               cmd.Parameters.Add(p6);
               cmd.Parameters.Add(p7);

               try
               {
                   objCn.Open();

                   resultado = cmd.ExecuteNonQuery();
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }

       public int insertNoConformidad(NoConformidad nc)
       {
           int resultado = 0;

           using (OracleCommand cmd1 = new OracleCommand("INSERTNOCONFORMIDAD", objCn))
           {
               cmd1.CommandType = CommandType.StoredProcedure;
               OracleParameter nc1 = new OracleParameter("R_Vnc_Codigo", OracleType.VarChar, 30);
               nc1.Value = nc.CodNC;
               OracleParameter nc2 = new OracleParameter("R_Nc_Descripcion", OracleType.VarChar, 4000);
               nc2.Value = nc.DesNC;
               OracleParameter nc3 = new OracleParameter("R_Nc_Fecha_Registro", OracleType.DateTime);
               nc3.Value = nc.FechaRegistroNC;
               OracleParameter nc4 = new OracleParameter("R_Or_Cod_Origen", OracleType.VarChar, 10);
               nc4.Value = nc.CodOrigen;
               OracleParameter nc5 = new OracleParameter("R_Ar_Cod_Area", OracleType.VarChar, 10);
               nc5.Value = nc.CodArea;
               OracleParameter nc6 = new OracleParameter("R_Re_Codigo", OracleType.VarChar, 10);
               nc6.Value = nc.CodRequisito;
               OracleParameter nc7 = new OracleParameter("R_Cod_Tipo_Solicitud", OracleType.VarChar, 10);
               nc7.Value = nc.CodTipoSolicitud;
               OracleParameter nc8 = new OracleParameter("R_Usu_Nro_Documento", OracleType.VarChar, 20);
               nc8.Value = nc.CodUsuario;
               OracleParameter nc9 = new OracleParameter("R_Nom_Auditoria", OracleType.VarChar, 200);
               nc9.Value = nc.NomAuditoria;
               OracleParameter nc10 = new OracleParameter("R_Fec_Auditoria", OracleType.VarChar,10);
               nc10.Value = nc.FecAuditoria;
               OracleParameter nc11 = new OracleParameter("Rest_Codestado", OracleType.VarChar, 10);
               nc11.Value = nc.VEST_CODESTADO;               
               OracleParameter nc12 = new OracleParameter("Rrec_Usuario_Creacion", OracleType.VarChar, 10);
               nc12.Value = nc.VREC_USUARIO_CREACION;
               OracleParameter nc13 = new OracleParameter("Rrec_Fecha_Creacion", OracleType.VarChar,10);
               nc13.Value = nc.DREC_FECHA_CREACION;

               cmd1.Parameters.Add(nc1);
               cmd1.Parameters.Add(nc2);
               cmd1.Parameters.Add(nc3);
               cmd1.Parameters.Add(nc4);
               cmd1.Parameters.Add(nc5);
               cmd1.Parameters.Add(nc6);
               cmd1.Parameters.Add(nc7);
               cmd1.Parameters.Add(nc8);
               cmd1.Parameters.Add(nc9);
               cmd1.Parameters.Add(nc10);
               cmd1.Parameters.Add(nc11);
               cmd1.Parameters.Add(nc12);
               cmd1.Parameters.Add(nc13);
               try
               {
                   objCn.Open();
                   resultado = cmd1.ExecuteNonQuery();

                   if (resultado > 0)
                   {
                       using (OracleCommand cmd2 = new OracleCommand("INSERTDETALLENOCONFORMIDAD", objCn))
                       {
                           cmd2.CommandType = CommandType.StoredProcedure;
                           foreach (NoConformidad.Item item in nc.ListaItems)
                           {
                               OracleParameter dt1 = new OracleParameter("R_VNC_CODIGO", OracleType.VarChar, 30);
                               dt1.Value = nc.CodNC;
                               OracleParameter dt2 = new OracleParameter("R_COD_AREA", OracleType.VarChar, 10);
                               dt2.Value = item.CodOtraArea;
                               cmd2.Parameters.Clear();
                               cmd2.Parameters.Add(dt1);
                               cmd2.Parameters.Add(dt2);
                               cmd2.ExecuteNonQuery();
                           }
                           return resultado;
                       }
                   }
                   else{return 0;}
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return resultado;
       }

       public int getSecuencia()
       {
           int secuencia = 0;

           using (OracleCommand cmd = new OracleCommand("SECUENCIANC", objCn))
           {
               cmd.CommandType = CommandType.StoredProcedure;
               OracleParameter refparameter = new OracleParameter();
               refparameter.ParameterName = "RECORDSET";
               refparameter.OracleType = OracleType.Cursor;
               refparameter.Direction = ParameterDirection.Output;
               cmd.Parameters.Add(refparameter);

               try
               {
                   objCn.Open();

                   OracleDataReader dr = cmd.ExecuteReader();

                   while (dr.Read())
                   {
                       secuencia = Convert.ToInt32(dr[0]);
                   }
               }
               catch (Exception ex)
               {
                   objCn.Dispose();
               }
               finally
               {
                   objCn.Close();
               }
           }
           return secuencia;
       }
    }
}
